package com.hyl.gulimall.seckill.scheduled;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * @author hyl_marco
 * @data 2022/5/29 - 14:39
 * 定时任务
 * 1. @Enablescheduling 开启定时任务功能
 * 2. @Scheduled 开启一个定时任务
 * 3. 自动配置类 TaskSchedulingAutoConfiguration
 *
 * 异步任务
 * 1. @EnableAsync
 * 2. @Async
 * 3. 自动配置类 TaskExecutionAutoConfiguration
 */
@Slf4j
@Component
@EnableAsync
@EnableScheduling
public class HelloSchedule {
    /**
     * Spring 和 Quartz的区别
     * 1. Spring不支持年
     * 2. Spring从1周一开始，Quartz从周日开始
     *
     * 注意
     * 1. 定时任务不应该阻塞，阻塞一个后面的一起阻塞了
     * 2. 解决方法：异步执行
     *      i.自己写线程池
     *      ii. 改配置（不好使）
     *      iii. 使用异步任务
     */
//    @Async
//    @Scheduled(cron = "* * * * * ?")
    public void hello() throws InterruptedException {
        log.info("...hello...");
        Thread.sleep(3000);
    }
}
